import tkinter as tk
import tkinter.ttk as ttk


class Example(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("TTK 框架切换示例")
        self.geometry('800x600')  # 调整为更合适的初始大小

        # 1. 创建并配置ttk样式
        self.style = ttk.Style()
        self._setup_styles()

        # 2. 创建切换按钮（使用ttk.Button并应用样式）
        self.ar_btn = ttk.Button(
            self,
            text="👊",
            width=2,
            command=self.toggle_left_frame,
            style="Toggle.TButton"


        )
        self.ar_btn.grid(row=0, column=0, sticky='ns',padx=0,ipadx=1)  # 仅上下拉伸

        # 3. 创建左侧框架（应用自定义样式）
        self.left_frame = ttk.Frame(self, style="Left.TFrame")
        self._init_left_frame()  # 初始化左侧框架内容

        # 4. 创建右侧框架（应用自定义样式，常显示）
        self.right_frame = ttk.Frame(self, style="Right.TFrame")
        self.right_frame.grid(row=0, column=2, sticky='nsew')
        self._init_right_frame()  # 初始化右侧框架内容

        # 5. 配置网格权重（实现自适应布局）
        self.rowconfigure(0, weight=1)  # 第0行充满高度
        self.columnconfigure(0, weight=0)  # 按钮列固定宽度
        self.columnconfigure(1, weight=0)  # 左侧框架列初始不拉伸
        self.columnconfigure(2, weight=1)  # 右侧框架列初始充满宽度

        # 6. 左侧框架显示状态标记
        self.left_visible = False

    def _setup_styles(self):
        """配置ttk样式"""
        # 按钮样式
        self.style.configure("Toggle.TButton",
                             font=('Segoe UI', 12),
                             padding=5)

        # 左侧框架样式
        self.style.configure("Left.TFrame",
                             background="#FFFACD")  # 浅黄色背景

        # 右侧框架样式
        self.style.configure("Right.TFrame",
                             background="#E0F2E9")  # 浅绿色背景

        # 框架内标签样式
        self.style.configure("FrameTitle.TLabel",
                             font=('Segoe UI', 14, 'bold'),
                             padding=10,
                             background="transparent")

    def _init_left_frame(self):
        """初始化左侧框架内容"""
        ttk.Label(
            self.left_frame,
            text="左侧面板",
            style="FrameTitle.TLabel"
        ).pack(pady=0,padx=10)

        # 添加一些示例控件
        for i in range(5):
            ttk.Button(
                self.left_frame,
                text=f"选项 {i + 1}"
            ).pack(fill='x', padx=10, pady=5)

    def _init_right_frame(self):
        """初始化右侧框架内容"""
        ttk.Label(
            self.right_frame,
            text="主内容区",
            style="FrameTitle.TLabel",

        ).pack(pady=20)

        # 添加示例内容
        ttk.Label(
            self.right_frame,
            text="这是始终显示的主内容区域",
            padding=10
        ).pack()

        ttk.Progressbar(
            self.right_frame,
            orient="horizontal",
            length=300,
            mode="determinate"
        ).pack(pady=20)
        # 设置进度条示例值
        self.right_frame.children['!progressbar'].step(80)

    def toggle_left_frame(self):
        """切换左侧框架显示状态"""
        if self.left_visible:
            # 隐藏左侧框架
            self.left_frame.grid_forget()
            self.left_visible = False
            self.ar_btn.config(text="👊")
            self.columnconfigure(1, weight=0)  # 左侧列不拉伸
            self.columnconfigure(2, weight=1)  # 右侧列充满宽度
        else:
            # 显示左侧框架
            self.left_frame.grid(row=0, column=1, sticky='nsew')
            self.left_visible = True
            self.ar_btn.config(text="👉")
            self.columnconfigure(1, weight=1)  # 左侧列拉伸
            self.columnconfigure(2, weight=2)  # 右侧列比例更大


if __name__ == "__main__":
    app = Example()
    app.mainloop()
